package org.db.createsql;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.db.comments.NumException;

/**
 * 
 * <p>Title: RealizeDaoInter   </p>
 * <p>Description: 数据库实现接口</p>
 * <p>Copyright: Copyright (c) 2012</p>
 * <p>Company: prd</p>
 * <p>Create Date/Time: 2014年8月13日 下午9:11:08<p>
 * @author porridge
 * @version 1.0
 * @url www.prdblog.com
 *
 */
public interface RealizeDaoInter{
	/**
	 * 保存实体
	 * @param cl
	 * @return 返回添加id
	 */
	public String save(Object cl) throws Exception;
	/**
	 * 更新实体
	 * @param obj
	 * @return 影响行数
	 */
	public int update(Object obj)throws Exception;
	/**
	 * 删除某个对象 根据对象主键进行删除如无主键则无法删除
	 * @param cl
	 * @return 影响行数
	 */
	public int dele(Object cl) throws Exception;
	/**
	 * 删除对象 传入条件
	 * @param cl
	 * @param where 条件
	 * @return  影响行数
	 */
	public int dele(Class<?> table,String where)throws Exception;
	/**
	 * 根据id删除某个对象
	 * @param cl
	 * @param where
	 * @return
	 * @throws NumException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public int deletable(Class<?> table,String where)throws Exception, SQLException;
	/**
	 * 根据主键查询实体类
	 * @param cls 类型
	 * @param id  主键名称
	 * @return 
	 */
	public <T> T find(Class<?> cls,String id) throws Exception;
	/**
	 * 查询实体类集合
	 * @param table 实体
	 * @param row  列名
	 * @return
	 */
	public <T> List<T> getList(Class<?> table,String row) throws Exception;
	/**
	 * 查询实体类集合
	 * @param table 实体
	 * @param row 列名
	 * @param min 起始行
	 * @param max 终止行
	 * @return
	 */
	public <T> List<T> getList(Class<?> table,String row,int min,int max) throws Exception;
	/**
	 * 查询实体类集合
	 * @param table 实体
	 * @param row 列名
	 * @param where 条件
	 * @return
	 */
	public <T> List<T> getList(Class<?> table,String row,String where) throws Exception;
	/**
	 * 查询实体类集合
	 * @param table 实体
	 * @param row 列名
	 * @param where 条件
	 * @param or 排序 字段
	 * @param orcls 排序类型 如desc asc
	 * @return
	 */
	public <T> List<T> getList(Class<?> table,String row,String where,String or,String orcls) throws Exception;
	/**
	 * 查询实体类集合
	 * @param <T>
	 * @param table 实体
	 * @param row  列名
	 * @param where  条件
	 * @param or  排序字段
	 * @param orcls 排序类型 如desc asc
	 * @param min  开始行数
	 * @param max 结束行数
	 * @return
	 */
	public <T> List<T> getList(Class<?> table,String row,String where,String or,String orcls,int min,int max) throws Exception;
	/**
	 * 查询某个实体类有多少行数据
	 * @param table 实体
	 * @return
	 */
	public int getCount(Class<?> table)throws Exception;
	/**
	 * 查询某个实体类有多少数据
	 * @param table
	 * @param where
	 * @return
	 * @throws Exception
	 */
	public int getCount(Class<?> table,String where)throws Exception;
	//====================================
	/**
	 * 根据主键查询表名
	 * @param table 实体
	 * @return 
	 */
	public String findtable(Class<?> table,String id)throws NumException,
	InstantiationException, IllegalAccessException, SQLException;
	/**
	 * 查询表名jqgrid
	 * @param <T>
	 * @param table 实体
	 * @param row  列名
	 * @param where  条件
	 * @param or  排序字段
	 * @param orcls 排序类型 如desc asc
	 * @param min  开始行数
	 * @param max 目标页数
	 * @param max 每页数量
	 * @return
	 */
	public String getListJqgrid(String table,String row,String where,String or,String orcls,int min,int max)throws Exception;
	/**
	 * 查询表名jqgrid
	 * @param <T>
	 * @param table 实体
	 * @param row  列名
	 * @param where  条件
	 * @param or  排序字段
	 * @param orcls 排序类型 如desc asc
	 * @param min  开始行数
	 * @param max 目标页数
	 * @param max 每页数量
	 * @return
	 */
	public String getListJqgrid(Class<?> table,String row,String where,String or,String orcls,int min,int max)throws Exception;
	/**
	 * 查询某个表名一直有多少行数据
	 * @param table 实体
	 * @return
	 */
	public int getCount(String table,String where)throws Exception;
	
	/**
	 * 执行自定义sql语句 查询类
	 * @param sql
	 * @return
	 */
	public ResultSet findQuery(String sql) throws SQLException;
	/**
	 * 执行修改和删除的自定义语句
	 * @param sql
	 * @return
	 */
	public int updateordelete(String sql) throws SQLException ;
	/**
	 * 返回原生态 Connection对象
	 * @return
	 * @throws SQLException
	 */
	public Connection getConnection() throws SQLException;
	/**
	 * 查询表字段最大的值
	 * @param table
	 * @param file
	 * @return
	 */
	public String tableMax(Class<?> table,String file)throws Exception;
	/**
	 * 查询表字段最大的值 加条件
	 * @param table
	 * @param file
	 * @param where
	 * @return
	 */
	public String tableMax(Class<?> table,String file,String where)throws Exception;
	/**
	 * 传入对象返回他的表名
	 * @param table
	 * @return
	 */
	public String findTablename(Class<?> table)throws Exception;
}
